package com.uncp.comisiondeadmision.evaluacion.controlador;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
      
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.uncp.comisiondeadmision.carnet.service.CarnetService;
import com.uncp.comisiondeadmision.comprobantedepago.beans.PostulanteBean;
import com.uncp.comisiondeadmision.evaluacion.beans.DetalleSolicitudBean;
import com.uncp.comisiondeadmision.evaluacion.beans.DetalleSolicitudBeanMixto;
import com.uncp.comisiondeadmision.evaluacion.beans.RequisitoBean;
import com.uncp.comisiondeadmision.evaluacion.service.InscripcionService;

public class ServletInscripcion extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	InscripcionService inscripcionService = new InscripcionService();
	CarnetService carnetService = new CarnetService();

	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		System.out.println("llegaste al service");
		try {

			boolean tieneArchivos = ServletFileUpload
					.isMultipartContent(request);

			if (tieneArchivos) {
				System.out.println("va a insertar detalle");
				
				int validar=insertaDetalleSolicitud(request, response);
				if(validar==1){
					actualizaSolicitud(request,response);
					traeRequisitos(request,response);
				}
				else{
					traeRequisitos(request,response);
				}
								
			

			} else {
				if (((String) request.getParameter("metodo"))
						.equals("traeRequisitos")) {
					traeRequisitos(request, response);
				} else if (((String) request.getParameter("metodo"))
						.equals("consulPostPend")) {
					System.out.println("LLEGA A CONSULTAR");
					consultarPostulantePendientes(request, response);
				} else if (((String) request.getParameter("metodo"))
						.equals("listarDetalle")) {
					System.out.println("LLEGA A LISTAR X COD POS");
					listarDetalleSolicitud(request, response);

				} else if (((String) request.getParameter("metodo"))
						.equals("verRequisito")) {
					System.out.println("VER REQUISITO");
					verRequisito(request, response);

				} else if (((String) request.getParameter("metodo"))
						.equals("aprobarRequisito")) {
					System.out.println("APROBAR REQUISITO");
					aprobarRequisito(request, response);

				} else if (((String) request.getParameter("metodo"))
						.equals("consulPostAct")) {
					System.out.println("ACTIVOS");
					listarSolcitudActiva(request, response);

				} else if (((String) request.getParameter("metodo"))
						.equals("desaprobarRequisito")) {

					desaprobarRequisito(request, response);

				} else if (((String) request.getParameter("metodo"))
						.equals("insertaSolicitud")) {
					actualizaSolicitud(request, response);
				}else{
					
					System.out.println("   zz   ");
				}

			}
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

	}

	@SuppressWarnings("unchecked")
	private int insertaDetalleSolicitud(HttpServletRequest req,
			HttpServletResponse res) throws ServletException, IOException {

		System.out.println("LLEGA A INSERTAR DETALLE");

		FileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(factory);
		int validar=-1;
		try {
			List<FileItem> items = (List<FileItem>) upload.parseRequest(req);
			DetalleSolicitudBean bean = new DetalleSolicitudBean();
			bean.setBlbImagen(items.get(3).get());
			
			bean.setIntCodRequisito(Integer.parseInt(items.get(0).getString()));
			bean.setIntNroSolicitud(Integer.parseInt(items.get(1).getString()));
			bean.setStrObservacion("");
			bean.setStrEstado("pendiente");
			
			String validaUpdateorInsert=items.get(2).getString();
			
			if(validaUpdateorInsert.equals("null")){
			validar=inscripcionService.insertaDetalleSolicitud(bean);
			System.out.println("inserto");
			}
			else if(validaUpdateorInsert.equals("desaprobado")){
				
				inscripcionService.actualizaDetalleSolicitud(bean);
				
			}else
			{
				
				System.out.println("fijate los estados de requisitos en tu base de datos");
			}
			

		} catch (FileUploadException e) {
			System.out.println(e.getMessage() + "archivooooooooooo");
		} catch (Exception e) {
			System.out.println("erorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr");
			//res.sendRedirect("inscripcion?metodo=traeRequisitos");
		}
		return validar;

	}

	private int actualizaSolicitud(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		HttpSession sesion = request.getSession();
		PostulanteBean bean = (com.uncp.comisiondeadmision.comprobantedepago.beans.PostulanteBean) sesion
				.getAttribute("DATOS_POSTULANTE");
		System.out.println("Va a insertar solicitud de Postulante  : "
				+ bean.getIntCodPostulante());

		int ultimaSoliInsertada = -1;

		try {

			ultimaSoliInsertada = inscripcionService.actualizaSolicitud(bean);
			

		} catch (Exception e) {
			e.printStackTrace();
			ultimaSoliInsertada = -1;
		}

		if (ultimaSoliInsertada != -1) {
			System.out.println("Inserto solicitud : " + ultimaSoliInsertada);
		} else {
			System.out.println("No inserto !");
		}
		return ultimaSoliInsertada;

	//	request.setAttribute("codigo_Solicitud", "" + ultimaSoliInsertada);

	}

	private void traeRequisitos(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		System.out.println("Esta q trar RRRRRRRRRRRRRRrr");
		HttpSession sesion = request.getSession();
		com.uncp.comisiondeadmision.comprobantedepago.beans.PostulanteBean b = (com.uncp.comisiondeadmision.comprobantedepago.beans.PostulanteBean) sesion
				.getAttribute("DATOS_POSTULANTE");
		System.out.println("Postulante ???????? : " + b.getIntCodPostulante());

		ArrayList<RequisitoBean> lista = null;
		try {

			lista = inscripcionService.traeRequisitos(b.getIntCodPostulante());

			if (lista != null) {
				System.out.println("HAY DATAAAAAAAAAAAAA");
			}

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		request.setAttribute("registro_requisitos", lista);
		/*request.getRequestDispatcher("/solicitudRegistrada.jsp").forward(
				request, response);*/
		getServletContext().getRequestDispatcher("/solicitudRegistrada.jsp").forward(request, response);
	}

	protected void consultarPostulantePendientes(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		ArrayList<PostulanteBean> array = null;

		try {
			
			////aca creo q era no toy seguro get consulta pendientesdesaprobados
			array = carnetService.getConsultaPendientes();

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		request.setAttribute("pendientes", array);
		request.getRequestDispatcher("/solicitudEvaluada.jsp").forward(request,
				response);
	}

	protected void listarDetalleSolicitud(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		PostulanteBean bean = null;
		String cod_postu = request.getParameter("codigo");
		System.out.println("listarDetalleSolicitud ->" + cod_postu);
		ArrayList<DetalleSolicitudBeanMixto> array = null;
		try {
			bean = carnetService.getConBusPos(Integer.parseInt(cod_postu),
					"pendiente");

			array = inscripcionService.traeDetallePendiente(Integer
					.parseInt(cod_postu));

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		request.setAttribute("DETALLE_SOLICITUD", array);
		request.setAttribute("BEAN", bean);

		request.getRequestDispatcher("inscripcion?metodo=consulPostPend")
				.forward(request, response);

	}

	protected void verRequisito(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("image/jpg");

		String item = request.getParameter("item");
		System.out.println("DetalleSolicitud ->" + item);
		DetalleSolicitudBean bean = null;
		try {
			bean = inscripcionService.buscaDetalle(Integer.parseInt(item));

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		ServletOutputStream out = response.getOutputStream();
		out.write(bean.getBlbImagen());
	}

	protected void aprobarRequisito(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String item = request.getParameter("item");
		
		String observacion=request.getParameter("observacion");
		System.out.println("Actualizar ITEM :  ->" + item);
		Integer resultado = -1;
		String mensaje = null;
		try {
			int solicitud=Integer.parseInt(request.getParameter("solicitud"));
			resultado = inscripcionService.aprobarRequisito((Integer
					.parseInt(item)),observacion);
			
			inscripcionService.apruebaSolicitud(solicitud);
			System.out.println("aca ultimaaaaaaaaaa "+solicitud+"  "+inscripcionService.apruebaSolicitud(solicitud));
			
			
			if (resultado < 1) {
				mensaje = "NO SE PUEDO ACTUALIZAR";
			}

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		;
		request.setAttribute("RESULTADO_UPDATE", mensaje);
		request.getRequestDispatcher("inscripcion?metodo=consulPostPend")
				.forward(request, response);
	}

	protected void desaprobarRequisito(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String item = request.getParameter("item");
		String observacion=request.getParameter("observacion");
		
		///
		System.out.println("ssssssssssssssssssssssss "+observacion);
		System.out.println("Actualizar ITEM :  ->" + item);
		Integer resultado = -1;
		String mensaje = null;
		try {

			resultado = inscripcionService.desaprobarRequisito((Integer
					.parseInt(item)),observacion);
			if (resultado < 1) {
				mensaje = "NO SE PUEDO ACTUALIZAR";
			}

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		request.setAttribute("RESULTADO_UPDATE", mensaje);
		request.getRequestDispatcher("inscripcion?metodo=consulPostPend")
				.forward(request, response);
	}

	protected void listarSolcitudActiva(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		ArrayList<PostulanteBean> array = null;

		try {

			array = carnetService.getConsulPostu();

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

		request.setAttribute("POSTULANTES_SOL_APROB", array);
		request.getRequestDispatcher("/solicitudAprobada.jsp").forward(request,
				response);
	}

}
